﻿using Microsoft.AspNetCore.Mvc.ModelBinding.Validation;

namespace VisionSurface.Web.Filters
{
    /// <summary>
    /// 自定义的枚举模型验证提供程序
    /// PS：谨慎使用该模型验证提供程序，因为目前大部分接口使用的枚举类型不是可null类型，也不是Required特性类型，
    /// 会导致没有默认值的枚举类型（尤其是枚举下标不是从0开始的枚举）无法通过自定义的枚举验证器EnumModelValidator的验证
    /// </summary>
    public class EnumModelValidatorProvider : IModelValidatorProvider
    {
        public void CreateValidators(ModelValidatorProviderContext context)
        {
            var isEnum = context.ModelMetadata.UnderlyingOrModelType.IsEnum;

            if (isEnum)
            {
                context.Results.Add(new ValidatorItem
                {
                    Validator = new EnumModelValidator(),
                    IsReusable = true
                });
            }
        }
    }
}
